#ifndef _TOKEN
#define _TOKEN

#include "random_gen.hpp"
#include <string>

class token: public generator
{
  public:	
	token(unsigned short _len);
	token(unsigned short _len, unsigned short _min_distr_value, unsigned short _max_distr_value, const std::string& _seed_status_file);
	token(unsigned short _len, unsigned short _min_distr_value, unsigned short _max_distr_value, const std::string& _allowed_punct, const std::string& _forbidden_punct, bool _allow_first_as_punct, const std::string& _seed_status_file);

	bool validate(const std::string& _str);

	const std::string experiment();
	
	unsigned short _max_token_len;
	
	static bool check_rule_digit_in_string(const std::string& _str);
	
	static bool check_rule_upper_in_string(const std::string& _str);	
	
	static bool check_rule_lower_in_string(const std::string& _str);	

	static bool check_rule_punct_in_string(const std::string& _str, const std::string& _allowed_punct, const std::string& _forbiddden_punct, bool _allow_first_as_punct);	
	
	static bool check_rule_loosely_different_in_string(const std::string& _str);	


private:
	std::string allowed_punct;
	std::string forbidden_punct;
	bool allow_first_as_punct;

};


#endif
